﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using Autocentro.Entities;
using Autocentro.BussinesLogic;


namespace Autocentro.UI
{
    public partial class FrmVenta : Form
    {
        [Dependency]
        public IVentaBL ventaBL { get; set; }

        [Dependency]
        public IDetalleVentaBL detVentaBL { get; set; }

        [Dependency]
        public IProductoBL productoBL { get; set; }

        public FrmVenta()
        {
            InitializeComponent();
            this.BuildUp();
        }

        private void FrmVenta_Load(object sender, EventArgs e)
        {
            dateTimePicker1.Enabled = false;
            dateTimePicker2.Enabled = false;
            lblFec1.Text = "Desde:";
            ReiniciarFechas();
            CargarData();
        }

        //private void CargarData()
        //{
        //    //var criterio = txtCriterio.Text == string.Empty ? null : txtCriterio.Text;
        //    //vENTABindingSource.DataSource = VentaBL.GetAllFromVentasByCriterio(criterio);

        //}

        private void rbtnGeneral_Click(object sender, EventArgs e)
        {
            CargarData();
        }

        private void rbtnFechas_Click(object sender, EventArgs e)
        {
            CargarData();
        }

        private void rbtnDia_Click(object sender, EventArgs e)
        {
            CargarData();
        }

        private void ReiniciarFechas()
        {
            dateTimePicker1.Value = DateTime.Now.Date;
            var fec2 = dateTimePicker1.Value.Date;
            dateTimePicker2.Value = fec2.AddDays(1);
        }

        private void CargarData()
        {
            if (rbtnGeneral.Checked) // solo cliente
            {
                dateTimePicker1.Enabled = false;
                dateTimePicker2.Enabled = false;
                dateTimePicker2.Visible = true;
                lblFec2.Visible = true;
                lblFec1.Text = "Desde:";

                vENTABindingSource.DataSource = ventaBL.GetFromVentasbyFechasAndCliente(null, null, txtCriterio.Text);
            }

            if (rbtnFechas.Checked == true) // cliente y fechas
            {
                dateTimePicker1.Enabled = true;
                dateTimePicker2.Enabled = true;
                dateTimePicker2.Visible = true;
                lblFec1.Text = "Desde:";
                lblFec2.Visible = true;

                var fec1 = dateTimePicker1.Value.Date;
                var fec2 = dateTimePicker2.Value.Date;

                if (fec1 <= fec2)
                {
                    vENTABindingSource.DataSource = ventaBL.GetFromVentasbyFechasAndCliente(fec1, fec2, txtCriterio.Text);
                }
                else
                {
                    ReiniciarFechas();
                    MessageBox.Show("La fecha de inicio debe ser menor o igual a la fecha de término", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            if (rbtnDia.Checked == true) // cliente y dia 
            {
                dateTimePicker1.Enabled = true;
                dateTimePicker2.Visible = false;
                lblFec2.Visible = false;
                lblFec1.Text = "Día:";
                
                var fec1 = dateTimePicker1.Value.Date;
                
                vENTABindingSource.DataSource = ventaBL.GetFromVentasbyFechasAndCliente(fec1, null, txtCriterio.Text);
            }
           

            var _currentVenta = vENTABindingSource.Current as VENTA;
            {
                if (_currentVenta != null)
                {
                    detalleVentaBindingSource.DataSource = detVentaBL.GetFromDetalleVentaByProductoDescAndVentaId("", _currentVenta.Id);
                }
                else
                {
                    detalleVentaBindingSource.Clear();
                }
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            var frmVenta = new FrmMttVenta();
            frmVenta.AddVenta();
            frmVenta.ShowDialog();
            CargarData();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            var venta = vENTABindingSource.Current as VENTA;
            if (venta != null)
            {
                var frmVenta = new FrmMttVenta();
                frmVenta.Editar(venta.Id);
                frmVenta.ShowDialog();
                CargarData(); 
            }
            else 
            {
                MessageBox.Show("Debe de seleccionar una Venta");
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
           var _venta = vENTABindingSource.Current as VENTA;

           if (_venta != null)
           {
               if (_venta.Cancelada == false)
               {
                   var rpt = MessageBox.Show(this, string.Format("Desea cancelar la venta?"), "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                   if (rpt == DialogResult.Yes)
                   {
                       ventaBL.CancelarVenta(_venta.Id);
                       foreach (var item in _venta.DetalleVenta)
                       {
                           var producto = productoBL.GetFromProductoByID(item.IdProducto);
                           var actproducto = producto;
                           actproducto.Stock = producto.Stock + item.Cantidad;
                           productoBL.UpdateProducto(actproducto);
                       }
                       MessageBox.Show("Venta cancelada correctamente", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                       CargarData();
                   }
               }
               else MessageBox.Show("Esta venta ya está cancelada", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
           else MessageBox.Show("Debe seleccionar una venta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarData();
        }

        private void vENTADataGridView_CurrentCellChanged(object sender, EventArgs e)
        {
            VENTA currentVenta = vENTABindingSource.Current as VENTA;
            if (currentVenta != null)
            {
                detalleVentaBindingSource.DataSource = detVentaBL.GetAllFromDetalleVentaByVentaId(currentVenta.Id);
            }
        }

        private void txtCriterio_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                CargarData();
            }
        }

        private void TxtProductoDesc_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                BuscarEnDetalleCompra();
            }
        }

        private void BtnBuscarProducto_Click(object sender, EventArgs e)
        {
            BuscarEnDetalleCompra();
        }

        private void BuscarEnDetalleCompra()
        {
            VENTA  _currentVenta = vENTABindingSource.Current as VENTA;

            if (_currentVenta != null)
            {
                detalleVentaBindingSource.DataSource = detVentaBL.GetFromDetalleVentaByProductoDescAndVentaId(TxtProductoDesc.Text, _currentVenta.Id);
            }
            else
            {
                MessageBox.Show("Debe seleccionar una Venta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void txtCriterio_KeyPress(object sender, KeyPressEventArgs e)
        {
            var slash = Convert.ToString("/");
            var coma = Convert.ToString(",");
            var guion = Convert.ToString("-");
            var punto = Convert.ToString(".");
            var amberson = Convert.ToString("&");

            string cadena = slash + coma + guion + punto + amberson + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar) || (char.IsNumber(e.KeyChar)))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void TxtProductoDesc_KeyPress(object sender, KeyPressEventArgs e)
        {
            var slash = Convert.ToString("/");
            var coma = Convert.ToString(",");
            var guion = Convert.ToString("-");
            var punto = Convert.ToString(".");

            string cadena = slash + coma + guion + punto + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar) || (char.IsNumber(e.KeyChar)))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }



    }
}
